package com.glink.manage.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.glink.manage.domain.PersonManageBean;
import com.glink.manage.vo.person.CertificatePageVO;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @author  qiushaoshan
 * @since  2025-01-13
 */
public interface PersonManageMapper extends BaseMapper<PersonManageBean> {

    /**
     * 根据身份证号查询用户信息
     * @param card 身份证号
     * @return 用户信息
     */
    List<PersonManageBean> findByCard(String card);

    /**
     * 分页查询证件照
     * @param searchStr 查询车牌号或者姓名
     * @param index 页数
     * @param size 数量
     */
    List<CertificatePageVO> pageCertByPersonAndCar(@Param("searchStr") String searchStr, @Param("orgIdList") List<String> orgIdList, @Param("index") int index, @Param("size") int size);

    /**
     * 统计证件照
     * @param searchStr 查询牌照号或者姓名
     * @return
     */
    Integer countCertByPersonAndCar(@Param("searchStr") String searchStr, @Param("orgIdList") List<String> orgIdList);

    /**
     * 根据参建单位和工程查询准入的用户名称
     *
     * @param constructionWorkObjId  工程ID
     * @param participatingUnitObjId 参建单位ID
     * @return 准入人员名称
     */
    List<String> findAccessPersonNameByWorkObjIdAndUnitObjId(@Param("constructionWorkObjId") String constructionWorkObjId, @Param("participatingUnitObjId") String participatingUnitObjId, @Param("nowDate") String nowDate);

    /**
     * 查询最大ID
     * @return ID
     */
    Integer findMaxId();

    /**
     * 查询未同步人员信息
     * @param devSno 设备号
     * @param orgIdList 组织单位ID
     * @param constructionWorkObjId 工程ID
     * @param nowDate 临时人员准入-当前时间
     * @param approvalFormStatus 正式人员审判单类型
     * @param admissionType 临时准入类型-人员
     * @param accessStatus 审批单状态
     * @param temporaryApprovalFormStatus 临时准入，审批单类型
     * @return 人员ID
     */
    List<Integer> findPersonIdByWorkIdAndNotSync(@Param("devSno") String devSno, @Param("orgIdList") List<String> orgIdList, 
                                                 @Param("constructionWorkObjId") String constructionWorkObjId, 
                                                 @Param("nowDate") Date nowDate,
                                                 @Param("approvalFormStatus") String approvalFormStatus,
                                                 @Param("admissionType") String admissionType,
                                                 @Param("accessStatus") String accessStatus,
                                                 @Param("temporaryApprovalFormStatus") String temporaryApprovalFormStatus,
                                                 @Param("limit") Integer limit);

    /**
     * 查询未同步人员信息
     * @param devSno 设备号
     * @param orgIdList 组织单位ID
     * @param constructionWorkObjId 工程ID
     * @param nowDate 临时人员准入-当前时间
     * @param approvalFormStatus 正式人员审判单类型
     * @param admissionType 临时准入类型-人员
     * @param accessStatus 审批单状态
     * @param temporaryApprovalFormStatus 临时准入，审批单类型
     * @return 人员ID
     */
    List<Integer> findPersonIdByWorkId(@Param("devSno") String devSno, @Param("orgIdList") List<String> orgIdList,
                                                 @Param("constructionWorkObjId") String constructionWorkObjId,
                                                 @Param("nowDate") Date nowDate,
                                                 @Param("approvalFormStatus") String approvalFormStatus,
                                                 @Param("admissionType") String admissionType,
                                                 @Param("accessStatus") String accessStatus,
                                                 @Param("temporaryApprovalFormStatus") String temporaryApprovalFormStatus);

    /**
     * 查询未同步人员信息
     * @param devSno 设备号
     * @param orgIdList 组织单位ID
     * @param constructionWorkObjId 工程ID
     * @param nowDate 临时人员准入-当前时间
     * @param approvalFormStatus 正式人员审判单类型
     * @param admissionType 临时准入类型-人员
     * @param accessStatus 审批单状态
     * @param temporaryApprovalFormStatus 临时准入，审批单类型
     * @return 人员ID
     */
    List<Integer> findPersonIdByExistEffective(@Param("devSno") String devSno, @Param("orgIdList") List<String> orgIdList,
                                                 @Param("constructionWorkObjId") String constructionWorkObjId,
                                                 @Param("nowDate") Date nowDate,
                                                 @Param("approvalFormStatus") String approvalFormStatus,
                                                 @Param("admissionType") String admissionType,
                                                 @Param("accessStatus") String accessStatus,
                                                 @Param("temporaryApprovalFormStatus") String temporaryApprovalFormStatus);
}
